import { distanceNum } from "./distance";

/**
 * 判断当前位置是否在收藏地点的500米范围内
 * @param {Object} location - 当前位置，包含longitude和latitude
 * @param {Array} favorites - 收藏地点数组
 * @returns {Object} - 包含是否为收藏地点和对应ID的对象
 */
export default function getIsFavorite(location, favorites) {
  // 1. 边界值校验：避免location为空或格式错误
  if (!location || !location.longitude || !location.latitude) {
    console.warn('当前位置信息不完整，无法判断是否在收藏区域内');
    return { favorite_id: null, isFavorite: false };
  }

  try {
    // 2. 处理收藏数据：过滤无效坐标
    const validLocations = (favorites || []).filter(item => {
      // 确保经纬度存在且为有效数字
      return item && 
             item.location &&
             typeof item.location.longitude === 'number' && 
             typeof item.location.latitude === 'number' &&
             !isNaN(item.location.longitude) && 
             !isNaN(item.location.latitude);
    }).map(item => ({
      id: item.favorite_id,  
      location: {
        longitude: item.location.longitude,
        latitude: item.location.latitude
      }
    }));

    // 3. 无有效收藏位置时直接返回false
    if (validLocations.length === 0) {
      return { favorite_id: null, isFavorite: false };
    }

    // 4. 检查是否在0.1单位范围内（根据实际单位判断，假设是公里的话就是100米）
    for (const item of validLocations) {
      try {
        const distance = distanceNum(location, item.location);
        if (distance <= 0.1) {
          return { favorite_id: item.id, isFavorite: true };
        }
      } catch (error) {
        console.error('计算距离时出错:', error);
        // 单个计算错误不影响整体判断，继续检查下一个
        continue;
      }
    }

    // 5. 没有找到在范围内的收藏地点
    return { favorite_id: null, isFavorite: false };
  } catch (error) {
    console.error('判断收藏区域失败:', error);
    return { favorite_id: null, isFavorite: false };
  }
}
